﻿/**********************************************************************
 * @file   FITKMaterialFailBiquad.h
 * @brief  BIQUAD失效材料
 * @author zhangjingx (hiter25@outlook.com)
 * @date   2025-08-11
 *********************************************************************/
#ifndef __FITKMATERIALFAILBIQUAD_H__
#define __FITKMATERIALFAILBIQUAD_H__

#include "FITKAbstractRadiossData.h"
#include "FITK_Interface/FITKInterfacePhysics/FITKAbstractMaterial.h"

namespace Radioss
{
    struct FITKMaterialFailBiquadData
     {
        double m_c1 = 0.0; //!< 单轴压缩处的塑性应变
        double m_c2 = 0.0; //!< 剪切时的塑性应变
        double m_c3 = 0.0; //!< 单轴张力中的塑性应变
        double m_c4 = 0.0; //!< 平原应变张力下的塑性应变
        double m_c5 = 0.0; //!< 双轴张力下的衰竭应变
        double m_pThickFail = 0.0; //!< 通过厚度积分点的比率必须在元素委派之前失败（仅外壳）
        int m_mFlag = 0; //!< 材料选择器标志

     };
    /**
     * @brief  BIQUAD失效材料
     * @author zhangjingx (hiter25@outlook.com)
     * @date   2025-08-11
     */
    class FITKRadiossDataAPI FITKMaterialFailBiquad : public Interface::FITKAbstractMaterial,
          public FITKAbstractRadiossData
    {
        Q_OBJECT
        RadiossKeyWord(FITKMaterialFailBiquad,/FAIL/BIQUAD); //!< Radioss关键字标识
        FITKCLASS(Radioss, FITKMaterialFailBiquad); //!< FITK类标识
         
    public:
        /**
         * @brief 构造函数
         * @details 初始化Johnson-Cook材料模型对象
         */
        explicit FITKMaterialFailBiquad() = default;

        /**
         * @brief 虚析构函数
         * @details 确保正确释放派生类对象
         */
        virtual ~FITKMaterialFailBiquad() = default;

        /**
         * @brief 获取材料数据
         * @return FITKMaterialPlasJohnsData 返回当前材料的参数数据
         */
        const FITKMaterialFailBiquadData & getMaterialDataReadOnly() const;
          /**
         * @brief 获取材料数据
         * @return FITKMaterialPlasJohnsData 返回当前材料的参数数据
         */
        FITKMaterialFailBiquadData & getMaterialData();

    private:
        FITKMaterialFailBiquadData m_data; //!< 材料数据
    };  
}
#endif //!__FITKMATERIALFAILBIQUAD_H__
